package com.qf.business.student.controller;

import com.qf.business.student.input.StudentInput;
import com.qf.business.student.service.StudentService;
import com.qf.commons.web.apiversion.ApiVersion;
import com.qf.data.entity.Student;
import com.qf.data.r.R;
import com.qf.data.r.RUtils;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.constraints.Length;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * description:
 * author: Ken
 * 公众号：Java架构栈
 */
@RestController
@RequestMapping("/stu")
@Slf4j
@Validated
@RefreshScope
public class StuController {

    @Autowired
    private StudentService studentService;

    @Value("${qphone.name}")
    private String name;

    /**
     * 查询学生列表 - 1.0
     * @return
     */
    @RequestMapping("/list")
//    @ApiVersion(1.0)
    public R list(){
        log.debug("[stu-list] 学生列表 - 读取远程的配置信息：{}", name);
        List<Student> stus = studentService.list();
        return RUtils.create("学生列表 V1.0");
    }


    /**
     * 查询学生列表 - 2.0
     * @return

    @RequestMapping("/list")
    @ApiVersion(2.0)
    public R list2(){
        log.debug("[stu-list] 学生列表 2.0！");
        List<Student> stus = studentService.list();
        return RUtils.create("学生列表 V2.0");
    } */

    /**
     * 学生登录接口
     * @return
     */
    @RequestMapping("/login")
    public R login(
                   @NotBlank(message = "用户名不能为空！") String username,
                   @NotBlank(message = "密码不能为空！")
                   @Length(min = 6, max = 20, message = "密码长度必须是6~20位范围内！") String password){
        log.debug("[stu-login] 学生登录，用户名：{}，密码：{}", username, password);
        //调用service层 执行登录逻辑！

        return RUtils.create("登录成功！");
    }

    /**
     * 添加学生
     * @return
     */
    @RequestMapping("/insert")
    public R insert(@Valid StudentInput stu){
        log.debug("[stu-insert] 学生添加，{}", stu);

        Student student = new Student();
        BeanUtils.copyProperties(stu, student);

        //后续调用业务层
        boolean flag = studentService.save(student);
        return RUtils.create(flag);
    }

    /**
     * 根据学生id查询学生信息
     * @return
     */
    @ApiVersion(1.0)
    @RequestMapping("/getById")
    public R getById(Integer sId){
        log.debug("[get stu] 根据id获取学生信息 - {}", sId);
        //通过学生id查询学生信息 - 连带的要查询出当前学生所在的班级信息
        Student stu = studentService.getById(sId);
        return RUtils.create(stu);
    }

    /**
     * 根据学生id查询学生信息
     * @return
     */
    @ApiVersion(2.0)
    @RequestMapping("/getById")
    public R getById2(Integer sId){
        log.debug("[get stu] 根据id获取学生信息 - {}", sId);
        //通过学生id查询学生信息 - 连带的要查询出当前学生所在的班级信息
        Student stu = studentService.getById(sId);

        return RUtils.create(stu);
    }
}
